package com.CRApp.service.impl;

import com.CRApp.mapper.CartMapper;
import com.CRApp.pojo.Cart;
import com.CRApp.pojo.CartItemDTO;
import com.CRApp.service.CartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Collections;
import java.util.List;

/**
 * 购物车服务实现类
 * 实现购物车相关的业务逻辑
 */
@Service
public class CartServiceImpl implements CartService {
    
    @Autowired
    private CartMapper cartMapper;
    
    /**
     * 添加商品到购物车
     * 如果商品已存在，则更新数量（累加）
     * @param cart 购物车项信息，包含用户ID、商品ID和数量
     * @return 添加是否成功
     */
    @Override
    @Transactional
    public boolean addToCart(Cart cart) {
        if (cart == null || cart.getUserId() == null || cart.getProductId() == null || cart.getQuantity() == null) {
            return false;
        }
        
        try {
            // 检查商品是否已在购物车中
            Cart existingItem = cartMapper.selectByUserIdAndProductId(cart.getUserId(), cart.getProductId());
            if (existingItem != null) {
                // 如果商品已存在，更新数量（累加）
                int newQuantity = existingItem.getQuantity() + cart.getQuantity();
                return cartMapper.updateQuantity(existingItem.getCartId(), newQuantity) > 0;
            }
            // 如果商品不存在，添加新项
            return cartMapper.insert(cart) > 0;
        } catch (Exception e) {
            // 记录异常信息，实际项目中应该使用日志框架
            System.err.println("添加购物车异常: " + e.getMessage());
            return false;
        }
    }
    
    /**
     * 获取用户的购物车列表
     * 查询指定用户的所有购物车项
     * @param userId 用户ID
     * @return 购物车项列表
     */
    @Override
    public List<Cart> getUserCart(Integer userId) {
        if (userId == null) {
            return Collections.emptyList();
        }
        
        try {
            return cartMapper.selectByUserId(userId);
        } catch (Exception e) {
            System.err.println("获取购物车列表异常: " + e.getMessage());
            return Collections.emptyList();
        }
    }
    
    /**
     * 获取用户的购物车列表（带商品详情）
     * 查询指定用户的所有购物车项，并包含商品详情
     * @param userId 用户ID
     * @return 购物车项列表（带商品详情）
     */
    @Override
    public List<CartItemDTO> getUserCartWithProductDetails(Integer userId) {
        if (userId == null) {
            return Collections.emptyList();
        }
        
        try {
            return cartMapper.selectCartItemDTOsByUserId(userId);
        } catch (Exception e) {
            System.err.println("获取购物车列表（带商品详情）异常: " + e.getMessage());
            return Collections.emptyList();
        }
    }
    
    /**
     * 获取购物车项详情（带商品详情）
     * 查询指定购物车项的详情，并包含商品详情
     * @param cartId 购物车项ID
     * @return 购物车项（带商品详情）
     */
    @Override
    public CartItemDTO getCartItemWithProductDetails(Integer cartId) {
        if (cartId == null) {
            return null;
        }
        
        try {
            return cartMapper.selectCartItemDTOById(cartId);
        } catch (Exception e) {
            System.err.println("获取购物车项详情（带商品详情）异常: " + e.getMessage());
            return null;
        }
    }
    
    /**
     * 更新购物车商品数量
     * 修改指定购物车项的商品数量（覆盖原数量）
     * @param cartId 购物车项ID
     * @param quantity 新的商品数量
     * @return 更新是否成功
     */
    @Override
    @Transactional
    public boolean updateQuantity(Integer cartId, Integer quantity) {
        if (cartId == null || quantity == null || quantity <= 0) {
            return false;
        }
        
        try {
            return cartMapper.updateQuantity(cartId, quantity) > 0;
        } catch (Exception e) {
            System.err.println("更新购物车数量异常: " + e.getMessage());
            return false;
        }
    }
    
    /**
     * 删除购物车项
     * 根据购物车项ID删除单个购物车项
     * @param cartId 购物车项ID
     * @return 删除是否成功
     */
    @Override
    @Transactional
    public boolean deleteCartItem(Integer cartId) {
        if (cartId == null) {
            return false;
        }
        
        try {
            return cartMapper.deleteById(cartId) > 0;
        } catch (Exception e) {
            System.err.println("删除购物车项异常: " + e.getMessage());
            return false;
        }
    }
    
    /**
     * 删除购物车中的特定商品
     * 根据用户ID和商品ID删除购物车中的特定商品
     * @param userId 用户ID
     * @param productId 商品ID
     * @return 删除是否成功
     */
    @Override
    @Transactional
    public boolean deleteCartProduct(Integer userId, Integer productId) {
        if (userId == null || productId == null) {
            return false;
        }
        
        try {
            return cartMapper.deleteByUserIdAndProductId(userId, productId) > 0;
        } catch (Exception e) {
            System.err.println("删除购物车商品异常: " + e.getMessage());
            return false;
        }
    }
    
    /**
     * 清空用户购物车
     * 删除指定用户的所有购物车项，但保留购物车本身
     * @param userId 用户ID
     * @return 清空是否成功
     */
    @Override
    @Transactional
    public boolean clearUserCart(Integer userId) {
        if (userId == null) {
            return false;
        }
        
        try {
            return cartMapper.deleteByUserId(userId) > 0;
        } catch (Exception e) {
            System.err.println("清空购物车异常: " + e.getMessage());
            return false;
        }
    }
    
    /**
     * 获取购物车项详情
     * 查询指定购物车项ID的详细信息
     * @param cartId 购物车项ID
     * @return 购物车项信息
     */
    @Override
    public Cart getCartItem(Integer cartId) {
        if (cartId == null) {
            return null;
        }
        
        try {
            return cartMapper.selectById(cartId);
        } catch (Exception e) {
            System.err.println("获取购物车项详情异常: " + e.getMessage());
            return null;
        }
    }
} 